/** ==================================================================================== **/
/** 			     		Funzioni di utilità per manipolare le feature	 			 **/
/** ==================================================================================== **/

BootApplication.service("olFeatureService", [ function( ) {
	
	/**
	 * Crea la feature che ha per geometria il punto fornita come parametro.
	 * 
	 * @param {@link Float} lon, Longitudine del punto da disegnare
	 * @param {@link Float} lat, Latitudine del punto da disegnare
	 * @param {@link String} featureId, Identificativo della feature (number | string | undefined)
	 * @param {@link ol.style.Style} style, (opzionale)
	 * @param {@link ol.proj.ProjectionLike} sourceProjection, Projection in cui i dati sono letti
	 * @param {@link ol.proj.ProjectionLike} destProjection, Projection della geometria della feature
	 * 
	 * @return {@link ol.Feature}
	 */
	 this.createFeaturePoint = function (lon, lat, featureId, style, sourceProjection, destProjection){
		 
		 /**
		  * Creo la feature del punto
		  * 
		  * NOTA: 
		  *  In OpenLayers 3, per recuperare le feature dall'id s'imposta l'ID dell' elemento con il metodo setId. 
		  *  Compreso l'id nel costruttore che lo rende valido, ma aggiunge solo l'id come una proprietà (non l'identificatore).
		  */
		 var feature = new ol.Feature({
			 /** identificativo della feature **/
			 id: featureId,
			 /** geometria della feature **/
			 geometry: new ol.geom.Point([lon, lat]).transform(sourceProjection, destProjection)
		 }); 
			
		 /** number | string | undefined **/
		 feature.setId(featureId);
		 
		 /**
		  * Impostare lo stile per la feature. Se è nullo la feature non ha stile (stile null).
		  */
		 feature.setStyle(style);
			
		 return feature;
	 }// close createFeaturePoint
	 
	 /** 
	  * In base alla geometria, cerco di determinare un punto centrale alla stessa.
	  * Se non rieso a determinarlo ritorno null.
	  * 
	  * @param {@link ol.geom.Geometry} geometry, geometria della quale determinare il centroide
	  * 
	  * @return {@link ol.Coordinate}
	  */ 
	 this.getCentroidGeometry = function (geometry){
		
		if (geometry instanceof ol.geom.Point) 	 			return coordinates = geometry.getCoordinates();
		if (geometry instanceof ol.geom.MultiPoint) 		return coordinates = geometry.getFirstCoordinate();
			
		if (geometry instanceof ol.geom.LineString) 		return coordinates = geometry.getFirstCoordinate();
		if (geometry instanceof ol.geom.MultiLineString) 	return coordinates = geometry.getFirstCoordinate();
			
		if (geometry instanceof ol.geom.Polygon) 	 		return coordinates = geometry.getFirstCoordinate();
		if (geometry instanceof ol.geom.MultiPolygon) 		return coordinates = geometry.getFirstCoordinate()
			
		if (geometry instanceof ol.geom.Circle) 	 		return coordinates = geometry.getCenter();
		
		return null;
	}
}]); 
